#!/usr/bin/env python
# -*- coding: utf8 -*-
# 
#
##########################################################################################
#
#
# Responsable del codigo(no se quiere hacer cargo, pero lo presionamos)
# pablohernanjuan at hotmail dot com
# Programado en Python utilizando para la interface wxglade, editor preferido
# Geany, la base de datos Mysql. 
#
#
##########################################################################################
#
#
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
#
#########################################################################################

#Importamos los modulos necesarios
import wx
import sys
import MySQLdb
import wx.lib.dialogs


class Menu(wx.Frame): # arrancamos la clase principal que es en si el menu
    def __init__(self, *args, **kwds):

        kwds["style"] = wx.DEFAULT_FRAME_STYLE|wx.FRAME_NO_TASKBAR
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        
        # habilitamos un menu con varias opciones
        self.menubar = wx.MenuBar()
        # Creamos los menues que utilizaremos
        # habilitamos otro menu acercade
        menuacercade = wx.Menu()
        # habilitamos otro menu base de datos
        menubasededato = wx.Menu()
        # habilitamos otro menu coleccion
        menucoleccion = wx.Menu()
        # habilitamos otro menu listado
        menulistado = wx.Menu()

        # un subiten de coleccion que es Nueva entrada        
        self.coleccion_nueva_entrada = wx.MenuItem(menucoleccion, wx.NewId(), "&Nueva Entrada", "Ingreso de nuevas entradas", wx.ITEM_NORMAL)
        self.coleccion_editar = wx.MenuItem(menucoleccion, wx.NewId(), "&Editar", "Permite editar los datos guardados")
        self.coleccion_buscar = wx.MenuItem(menucoleccion, wx.NewId(), "&Buscar", "Busca un elemento en la coleccion", wx.ITEM_NORMAL)
                
        # agregamos el iten de salir
        self.listado_salir = wx.MenuItem(menulistado, wx.NewId(), "&Salir", "Salir de la aplicación", wx.ITEM_NORMAL)
        self.basededatosvaciar = wx.MenuItem(menubasededato, wx.NewId(), "&Vaciar Datos", "Vacia los datos cargados en la Base de datos", wx.ITEM_NORMAL)        
        self.listado_listar = wx.MenuItem(menulistado, wx.NewId(), "&Mostrar Coleccion", "Muestra la coleccion de historietas", wx.ITEM_NORMAL)
        self.acercadeesto = wx.MenuItem(menuacercade, wx.NewId(), '&La Licencia', 'Muestra informacion sobre licencias y toda esa porqueria.', wx.ITEM_NORMAL)
        self.acercadelautor =wx.MenuItem(menuacercade, wx.NewId(), '&Culpable', 'Muestra al ladri detras del codigo')
        
        # agregamos los elementos a los menues
        self.menubar.Append(menulistado, "&Listado")
        # un iten dentro del menu llamado coleccion
        self.menubar.Append(menucoleccion, "&Coleccion")
        self.menubar.Append(menubasededato, "&Base de datos")
        self.menubar.Append(menuacercade, u'&Acerca de...')

        # comenzamos atando los menues a diferentes acciones en este caso para finalizar el programa
        menulistado.AppendItem(self.listado_listar)
        menubasededato.AppendItem(self.basededatosvaciar)
        menuacercade.AppendItem(self.acercadeesto)
        menuacercade.AppendItem(self.acercadelautor)

        # agregamos los elementos a los menues
        menucoleccion.AppendItem(self.coleccion_nueva_entrada)
        menucoleccion.AppendItem(self.coleccion_editar)
        menucoleccion.AppendItem(self.coleccion_buscar)
        menulistado.AppendItem(self.listado_salir)

        # Ahora vienen los bind de las acciones
        self.Bind(wx.EVT_MENU, self.OnAcercade, self.acercadeesto)
        self.Bind(wx.EVT_MENU, self.OnAcercadelladri, self.acercadelautor)
        self.Bind(wx.EVT_MENU, self.OnListar, self.listado_listar)
        self.Bind(wx.EVT_MENU, self.OnVaciar, self.basededatosvaciar)

        # comenzamos atando los menues a diferentes acciones en este caso para finalizar el programa
        self.Bind(wx.EVT_MENU, self.OnSalir, self.listado_salir)
        self.Bind(wx.EVT_MENU, self.OnIngreso, self.coleccion_nueva_entrada)
        self.Bind(wx.EVT_MENU, self.OnBuscar, self.coleccion_buscar)
        self.Bind(wx.EVT_MENU, self.OnEditar, self.coleccion_editar)
        
        # agregamos la barra principal a la aplicacion
        self.SetMenuBar(self.menubar)
        # agregamos una barra de estado que nos brinda ayuda sobre el menu
        self.statusbar = self.CreateStatusBar()

        self.__set_properties()
        self.__do_layout()

    def __set_properties(self):

        self.SetTitle("Enciclotorietas...")
        _icon = wx.EmptyIcon()
        _icon.CopyFromBitmap(wx.Bitmap("/home/ed/programacion/svn/enciclotorietas/logo.png", wx.BITMAP_TYPE_ANY))
        self.SetIcon(_icon)
        self.CenterOnScreen()



    def __do_layout(self):

        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        self.SetSize((400, 140))
        self.Centre()

    def OnIngreso(self,evt):
        try:
            self.Destroy()            
        finally:
            import ingreso
            ventana = ingreso.Ingreso(None, -1,"")
            ventana.Show(True)

    def OnSalir(self, event): # Funcion para finalizar la aplicacion
        print ":-)"    
        self.Close()

    def OnListar(self, event): # Funcion que haria una muestra de la coleccion.
        try:
            self.Destroy()            
        finally:
            import listado
            ventana = listado.Listado(None, -1,"")
            ventana.Show(True)

    def OnVaciar(self, event):
        try:
            self.Destroy()            
        finally:
            import vaciado
            ventana = vaciado.Vaciar(None, -1,"")
            ventana.Show(True)
            
    def OnAcercade(self, event):
        licencia = open("licencia.txt", "r")
        mensaje = licencia.read()
        licencia.close()
        dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Licencia")
        dialogo.ShowModal()

    def OnAcercadelladri(self,event):
        ladri = open("ladri.txt","r")
        mensaje = ladri.read()
        ladri.close()
        dialogo = wx.lib.dialogs.ScrolledMessageDialog(self, mensaje, "Autor")
        dialogo.ShowModal()

    def OnBuscar(self,event):
        try:
            self.Destroy()            
        finally:
            import buscar
            ventana = buscar.Buscar(None, -1,"")
            ventana.Show(True)

    def OnEditar(self, event):
        try:
            self.Destroy()
        finally:
            import editar
            ventana = editar.Editar(None, -1,"")
            ventana.Show()



if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    principal = Menu(None, -1, "")
    app.SetTopWindow(principal)
    principal.Show()
    app.MainLoop()
